/**
 * 异步操作
 * @description: 跟mutaions是一样的，只是mutations是同步操作，不能有异步操作；而actions正好正mutaions相反
 * @author: junyong.hong
 * @createTime: 2018/5/7
 * @version: 1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
import model from '../../model/client-model'
import notify from '../../components/notification/function'
import bus from '../../util/bus'

const handleError = (err) => {
  // hand error
  if (err.code === 401) {
    notify({
      content: '请先登录~'
    })
    // 调用client-entry.js里的auth方法
    bus.$emit('auth')
  }
}

export default {
  /**
   * 测试
   * @param store
   * @param data 接收一个参数，多个参数用对象
   */
  updateCountAsync (store, data) {
    setTimeout(() => {
      store.commit('updateCount', {
        num: data.num
      })
    }, data.time)
  },
  /**
   * 获取todo列表
   * @param commit
   */
  fetchTodos ({ commit }) {
    model.getAllTodos()
      .then(data => {
        commit('fillTodos', data)
      })
      .catch(err => {
        handleError(err)
      })
  },
  /**
   * 修改todo
   * @param commit
   * @param id
   * @param todo
   */
  updateTodo ({ commit }, { id, todo }) {
    console.log('update1')
    model.updateTodo(id, todo)
      .then(data => {
        commit('updateTodo', { id: id, todo: data })
      }).catch(err => {
        handleError(err)
      })
  },
  /**
   * 删除todo
   * @param commit
   * @param id
   */
  deleteTodo ({ commit }, id) {
    model.deleteTodo(id)
      .then(data => {
        commit('deleteTodo', id)
        notify({
          content: '你少了一件事情要做'
        })
      }).catch(err => {
        handleError(err)
      })
  },
  /**
   * 批量删除todo
   * @param commit
   * @param state
   */
  deleteAllCompleted ({ commit, state }) {
    const ids = state.todos.filter(t => t.completed).map(t => t.id)
    model.deleteAllCompleted(ids)
      .then(() => {
        commit('deleteAllCompleted')
        notify({
          content: '清理一下'
        })
      }).catch(err => {
        handleError(err)
      })
  },
  /**
   * 添加todo
   * @param commit
   * @param todo 数据
   */
  addTodo ({ commit }, todo) {
    model.createTodo(todo)
      .then(data => {
        commit('addTodo', data)
        notify({
          content: '你又多了一件事情要做'
        })
      }).catch(err => {
        handleError(err)
      })
  },
  /**
   * 登录
   * @param commit
   * @param username
   * @param password
   * @returns {Promise}
   */
  login ({ commit }, { username, password }) {
    return new Promise((resolve, reject) => {
      model.login(username, password)
        .then(data => {
          commit('doLogin', data)
          notify({
            content: '登录成功'
          })
          resolve()
        }).catch(err => {
          handleError(err)
          reject(err)
        })
    })
  }
}
